export let Vue;
import RouterLink from './components/router-link';
import RouterView from './components/router-view';
export default function install(_Vue) { // 谁用我这个插件 版本就是谁
  Vue = _Vue;
  // 给所有的组件统一增加$route 和 $route 属性
  Vue.mixin({ //  _router 共享给每个人的
    beforeCreate() {
      // 父 store  子 拿父store  孙子 拿子的store
      // 我给根实例增加一个_router属性
      // 所有人都拿到根上的_router

      if (this.$options.router) {
        // 根组件
        this._router = this.$options.router;
        this._routerRoot = this; // 保存根实例

        // 初始化路由的逻辑 只初始化一次
        this._router.init(this); // 整个应用的根

        // 将current属性定义成响应式的，这样稍后更新current就可以刷新视图了
        Vue.util.defineReactive(this, '_route', this._router.history.current);
      } else {
        // 子组件上都有一个_routerRoot属性可以获取到最顶层的根实例
        this._routerRoot = this.$parent && this.$parent._routerRoot;
      }
      // 所有组件都有_routerRoot._router获取路由的实例
    }
  })
  // _routerRoot 是根实例  根实例上有_router属性
  // 所有的组件都可以获取根 _routerRoot, 获取根的属性 _routerRoot._router
  Object.defineProperty(Vue.prototype,'$route',{ // 属性 path matched
    get(){
      return this._routerRoot._route;
    }
  });
  Object.defineProperty(Vue.prototype, '$router', { // 方法 push go replace
    get() {
      return this._routerRoot._router
    }
  })
  
  //全局组件
  Vue.component('RouterLink', RouterLink)
  Vue.component('RouterView', RouterView)
}
